<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
	{
		// 1- new Promise生成的是一个Promise实例
        // const p = new Promise(()=>{});// p是Promise实例
    }
	{
		// 2- 可以更改状态，状态只能够更改一次
        // const p = new Promise((resolve, reject)=>{
		// 	resolve(100);
		// 	reject(200);
		// 	throw "异常";
        // })
    }
	{
		// 3- Promise实例当中的原型对象下有一个then函数
		// const p = new Promise((resolve, reject)=>{
		// 	resolve(100);
		// 	reject(200);
		// 	throw "异常";
		// })
        // p.then(value=>{
		// 	console.log("成功回调",value);
        // },reason=>{
		// 	console.log("失败回调",reason)
        // })
    }
	{
		// 4- 链式调用
		// new Promise((resolve, reject)=>{
		// 	resolve(100);
		// 	reject(200);
		// 	throw "异常";
		// }).then(value=>{
		// 	console.log("成功回调",value);
		// },reason=>{
		// 	console.log("失败回调",reason)
		// })
    }
	{
		// 5- then函数的返回值是一个新的Promise实例
        // 5-1- p2是一个Promise实例,状态和值受成功回调或失败回调返回值的影响。
        // 如果成功回调与失败回调没有执行，那么p2的状态为pending,值为undefined
        // const p = new Promise((resolve, reject) => {
        // })
        // const p2 = p.then(value=>{
		// 	console.log("成功回调");
        // },reason=>{
		// 	console.log("失败回调");
        // });
		// console.log(p2);


        // 5-2- then函数的返回值是一个新的Promise实例，实例状态和值是受成功或失败回调的返回值影响。
        // p的状态为成功看成功回调返回值，p的状态为值看失败回调返回值
        // 如果返回值是一个非Promise实例，那么p2的状态为成功（fulfilled）,值为返回的内容
        // 如果返回值是一个Promise实例，那么p2的状态和值与返回的Promise实例状态和值相同
        // 如果回调函数有异常，那么p2的状态为失败，值为异常信息
		// const p = new Promise((resolve, reject) => {
		// 	reject(100)
		// })
        // const p3 = new Promise((resolve,reject)=>{
		// 	resolve(90);
		// });
		// const p2 = p.then(value=>{
		// 	console.log("成功回调");
		// 	throw "异常啦！"
		// 	return new Promise((resolve,reject)=>{
		// 		resolve(9000);
		// 	});
		// },reason=>{
		// 	console.log("失败回调");
		// 	// return 300;
        //     // return new Promise((resolve,reject)=>{
		// 	// 	reject(90);
        //     // })
        //     return p3;
		// });
		// console.log(p2 === p3);// false
    }
	{
		// const p = new Promise(resolve=>{
		// 	resolve(200)
        // });
		// const p1 = p.then(value=>{
		// 	return value+100;
        // })
        // const p2 = p1.then(value=>{
		// 	return value+200;
        // });
		// p2.then(value=>{
		// 	console.log(value);
        // })


		new Promise(resolve=>{
			resolve(200)
		}).then(value=>{
			return value+100;
		}).then(value=>{
			return value+200;
		}).then(value=>{
			console.log(value);
		}).then(value=>{
			console.log(value);// undefined
        })
    }

</script>
</html>